package com.itany.corejava.code06_面向对象.继承;

/**
 * @author 石小俊
 * @date 2024年01月16日 14:46
 */
public class Animal {
    String name;
    private int age;

    public void show() {
        System.out.println("我是一个动物,姓名:" + name + ",年龄:" + age);
    }

    public void print() {
        System.out.println("我是父类中的方法");
    }

    public Animal() {

    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

class Dog extends Animal {
    private String gender;
    String name;

    public Dog(String name, int age, String gender) {
        // super与this用法类似
        // 表示调用父类中的资源
        // 此处表示调用父类中指定的构造方法
        // super只能出现一次,且必须在第一行
        super(name, age);
        this.name = name;
        this.gender = gender;
    }

//    public Dog(String name,int age,String dogName,String gender){
//        super(name,age);
//        this.name = dogName;
//        this.gender = gender;
//    }

    public Dog(String gender) {
        this.gender = gender;
    }


    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public void show() {
        // 此时父类与子类中均存在name属性,且都不是private修饰的
        // 默认访问的是子类中的属性
        System.out.println("name:" + name);
        System.out.println("父类name:" + super.name);
        // 调用方法时,如果子类与父类存在同名的方法
        // 默认访问子类方法
//        print();
        // 相当于下面代码
        this.print();
        // 如果想要访问父类方法,可以通过super.方法名(参数列表)进行访问
        super.print();
    }

    public void print() {
        System.out.println("这是子类中的方法");
    }
}

class TestAnimal {
    public static void main(String[] args) {
//        Animal animal = new Animal("旺财",5);
        Dog dog = new Dog("宠物狗", 5, "公");
//        Dog dog2 = new Dog("公");
        dog.name = "旺财";
        dog.show();
    }
}
